synology.forum архив спільноти · 2005–2022
ai.synology.forum →
ГлавнаяУправление Системой › Mail скрипт

Mail скрипт

User_2013 · 04.05.2013

Есть задумка повесить некий сервис, который будет по адресам из базы данных рассылать файлы, находящиеся в определенной папке, в заданное время.

В свое время такую штуку делал на сервере под управлением windows обычным скриптом в сотню строк на vbs. Все работало как атомные часы.

А вот на syno даже не знаю с чего начать. Поэтому несколько вопросов и буду благодарен за любые ссылки на любые наброски.

Вопросы:

1. Какой операционнкой является DSM? Где-то в обзорах пишут unix, где-то Linux. Если штудировать мануилы то, что будет наиболее близко по архитектуре?

2. Как реализовать скрипт? На Linux можно воспользоваться программой sendmail. Можно ли ее поставить на syno? или более разумно будет написать скрипт на perl? или есть иные решения?

3. Как завесить скрипт на планировщик задач?

 

Буду признателен за ответы и ссылки.

alexejnic · 04.05.2013

1. Linux он и в Африке Linux, архитектура зависит от модели (от ARM до Intel)

2. sendmail уже имеется. Для начала чтобы заработал нужно включить отправку уведомлений. Скрипты можно прикрутить через команды shell, можно даже просто через php, поместив файл примерно такого содержания в папку web.

 

<?php
//// Кому отсылаем
$email = "[email protected]";

//// Тема письма
$subject = "Рассылка";

//// Текст сообщения
$message = "Здесь текст рассылки";

//// Заголовки
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=koi-8r\r\n";
$headers .= "From: [email protected]\r\n";
//// Название программы с которой было отправлено сообщение
$headers .= "X-Mailer: ZEOS\r\n";

//// Отправка c проверкой
if (mail($email, $subject, $message, $headers)) {
    echo "Письмо улетело";
} else {
    echo "Ошибка, сообщение не доставлено";
}
?>

 

Базу с пользователями суем в MySql оттуда её через цикл и достаём присваивая переменной $email значение адреса почты.

 

3. В прошивке 4.2 говорят есть планировщик задач. Я на старой прошивке по старинке пользую ручную правку файла /etc/crontab

User_2013 · 05.05.2013

спасибо! попробую разобраться.

 

SergeS · 06.05.2013
спасибо! попробую разобраться.

 

Вот php-функция, которую я написал и несколько раз в разных проектах использовал, с поддержкой атачментов. Я в php тоже не сильно спец, только учусь, так что советы по улучшению с радостью принимаются :-))). Tолько не надо рассылать спам...

 

function send_email($mail_to, $from_mail, $from_name, $subject, $message, $file_name) 
{
$reply_to = $from_mail;
// Read the file content
if  ($file_name != '') 
  {
  if (!(file_exists($file_name))) {return FALSE;} //no attachment found
  $content = file_get_contents($file_name);
  $content = chunk_split(base64_encode($content));
  }
// Set the email header
// Generate a boundary
$boundary = md5(uniqid(time()));
// Email header
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "Reply-To: ".$reply_to."\r\n";
$header .= "MIME-Version: 1.0\r\n";
// Multipart wraps the Email Content and Attachment
$header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$boundary."\r\n";
// Email content
// Content-type can be text/plain or text/html
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n";    
//must be no boundary here - we do not know if the las one
// Attachment
if  ($file_name != '') 
  {
  $header .= "--".$boundary."\r\n";
  $header .= "Content-Type: application/xml; name=\"".basename($file_name)."\"\r\n";
  $header .= "Content-Transfer-Encoding: base64\r\n";
  $header .= "Content-Disposition: attachment; filename=\"".basename($file_name)."\"\r\n\r\n";
  $header .= $content."\r\n";
  }
//last boundary, with "--" on the end
$header .= "--".$boundary."--\r\n"; 
// Send email
return mail($mail_to, $subject, $message, $header);
}

User_2013 · 05.06.2013
Вот php-функция, которую я написал и несколько раз в разных проектах использовал, с поддержкой атачментов. Я в php тоже не сильно спец, только учусь, так что советы по улучшению с радостью принимаются :-))). Tолько не надо рассылать спам...

 

Спасибо вам за пример! только сейчас снова вернулся к вопросу создания скрипта. Немного изучил ваш пример. но не все понял буду признателен за комментарии.

 

SergeS · 05.06.2013
Спасибо вам за пример! только сейчас снова вернулся к вопросу создания скрипта. Немного изучил ваш пример. но не все понял буду признателен за комментарии.

 

Так а что непонятно-то? Спрашивай, не стесняйся, если смогу - помогу.

В принципе вроде все более менее понятно, берешь копируешь эту функцию в свой php-код, а потом ее просто вызываешь.

Параметры тоже вроде очевидны из названия:

$mail_to - емейл получателя; $from_mail - емейл автора; $from_name - имя автора; $subject - тема письма; $message - само тело письма; $file_name - путь к файлу-аттачменту, еслу пусто - то не делать аттачмент...

 

Ну и возвращает эта функзия true или false, в зависимости от того насколь успешно письмо было послано...

User_2013 · 06.06.2013
Так а что непонятно-то? Спрашивай, не стесняйся, если смогу - помогу.

В принципе вроде все более менее понятно, берешь копируешь эту функцию в свой php-код, а потом ее просто вызываешь.

Параметры тоже вроде очевидны из названия:

$mail_to - емейл получателя; $from_mail - емейл автора; $from_name - имя автора; $subject - тема письма; $message - само тело письма; $file_name - путь к файлу-аттачменту, еслу пусто - то не делать аттачмент...

 

Ну и возвращает эта функзия true или false, в зависимости от того насколь успешно письмо было послано...

стыдно, но разбираясь во всех тонкостях понял, что в линуксах мои познания сильно ограничены. Поэтому вопросы будут возможно детски.

Что смог сделать на syno, так с помощью winscp изучить структуры системных папок. Понял, что это очень урезанный линукс.

В общем, то что хочу портировать с win на nix я описывал, но повторюсь с алгоритмом: есть папка, в нее кладется файл(ы) определенного формата, есть скрипт, который весит в планировщике. В определенное время скрипт запускается и формирует письма по базе адресов с вложением из указанной папки.

Теперь попробую попробую написать свою последовательность действий и вопросы.

1. Устанавливаю PHPbb

2. Устанавливаю phpMyAdmin

3. Где нужно сформировать папку, куда будет сбрасываться аттач?

4. Пишу скрипт с использованием вашей функции. куда его сбрасывать?

5. Планировщик. Задача в планировщике пишется на bash? команда: Интерпретатор путь с к php скрипту ?

6. Как формируется база адресов. На win у меня акссессовский файл с которого скрипт просто всю инфу забирал. Здесь что-то подобное получится?

Заранее признателен за ответы.

 

ps в скрипте на win у меня авторизация прописана с внешним smtp c серевром а-ля gmail.com. Здесь такое можно сделать?

SergeS · 10.06.2013
стыдно, но разбираясь во всех тонкостях понял, что в линуксах мои познания сильно ограничены. Поэтому вопросы будут возможно детски.

Что смог сделать на syno, так с помощью winscp изучить структуры системных папок. Понял, что это очень урезанный линукс.

В общем, то что хочу портировать с win на nix я описывал, но повторюсь с алгоритмом: есть папка, в нее кладется файл(ы) определенного формата, есть скрипт, который весит в планировщике. В определенное время скрипт запускается и формирует письма по базе адресов с вложением из указанной папки.

Теперь попробую попробую написать свою последовательность действий и вопросы.

1. Устанавливаю PHPbb

2. Устанавливаю phpMyAdmin

3. Где нужно сформировать папку, куда будет сбрасываться аттач?

4. Пишу скрипт с использованием вашей функции. куда его сбрасывать?

5. Планировщик. Задача в планировщике пишется на bash? команда: Интерпретатор путь с к php скрипту ?

6. Как формируется база адресов. На win у меня акссессовский файл с которого скрипт просто всю инфу забирал. Здесь что-то подобное получится?

Заранее признателен за ответы.

 

ps в скрипте на win у меня авторизация прописана с внешним smtp c серевром а-ля gmail.com. Здесь такое можно сделать?

 

 

Ууу, как ты издалека заходишь :-)))

Мои познания в Линуксе тоже весьма более чем скромны, поэтому, что бы не позорится, я не буду тебе конкретно писать что и как сделать, напишу тебе примерно каким путем я с этим разбирался и какой путь тебе предстоит пройти. А без этого никак :-))) Все написанное прошу расценивать исключительно как совет и как один из возможных путей, не обязательно - самый оптимальный и самый удобный для тебя лично...

 

1) Устанавливаешь phpMyAdmin, играешься с ним, учишься создавать таблицы и базы данных, описывать их структуру, создавать юзеров MySQL, разбираешься с правами доступа этих юзеров, как их задавать/менять. Играешься с select-оператором ну хоть немного :-). Туториалов в интернете немного больше чем до фига.

 

2) Включаешь web-station и играешься немного с php, твоя задача для начала написать hello world на php. Потом играешься немного глубже, пытаясь написать что-то более осмысленно. Разбираешься как вызывать функции в php, как передавать параметры в функции :-). Туториалов - еще больше.

 

3) Применяя накопленный опыт в 1) и 2) - объединяешь знания :-). Следующая твоя задача - написать на php простейший скрипт, который залогинится к простенькой созданной тобой базе данных и покажет оттуда какие-либо данные в в виде вебстранички, например отобразит MySQL-таблицу из базы данных в виде html-таблицы.

 

4) Настраиваешь почтовые уведомления на Synology. Для этого прописываешь желаемый тобой гмейл сервер, имя пароль и все там необходимое. Да, gmail.com - работает, проверено, у меня так раньше на работе было сделано. Убеждаешься, что все работает, пытаясь отослать тестовый емейл. Все работает если ты его отослал из DSM и получил на указанный там емейл. Моя функция даденая тебе раньше без этого работать не будет, потому как php-шная (не моя!) функция mail(...) использует эти настройки, а я использую ее.

 

5) Ну а дальше уже все очевидно - собираешь весь накопленный опыт опять в кучку и пишешь php-скрипт, который будет коннектится к базе данный, извлекать оттуда емейл адреса, передавать их в качестве параметра в вызываемую в цикле мою функцию, опять же в качестве параметра передаешь путь к аттачменту (где бы он не лежал, лишь бы pнp имел туда доступ). К этому моменту половина из твоих общих неконкретных вопросов просто отпадет, ответ на них тебе будет уже очевиден :-). Но, наверняка появятся более конкретные специфические другие вопросы, если сам не найдешь как их решить - спрашивай опять ;-))).

 

php скрипт можно вызывать из планировщика как-то так (путь/имя-php файла у тебя конечно же будет свое): php /volume1/Scripts/BD_remainder.php.

 

Как формируется база адресов? Ну это вообще-то тебе должно быть видней ;-))). С акксессовским файлом на Синолоджи, я подозреваю - никак. Так что, что бы перенести данные я вижу только три варианта:

1) руками, если данных совсем мало :-))),

2) написать на вин-машине на любом известном тебе языке програмку, которая будет брать данные из аксессовского файла и вставлять в базу данных MySQL в нужном тебе формате.

3) самое наверное простое - из ms access сделать импорт твоих данных в что-то общеупотребительное, например в xml или csv, а потом в phpMyAdmin сделать экспорт этого xml или csv в твою базу данный. Посмотри какие форматы phpMyAdmin понимает.

 

При чем тут PHPbb я вообще не очень понял, выроятно ты хочешь раззылать что-то по базе данных пользователей твоего PHPbb. Туту я не помошник, с ним никогда не игрался и пока не планирую, ничего сказат ьпо этому поводу не могу.

 

Ну и самое главное - рассылая автоматически емейлы, да еще и с аттачментами, трижды подумай, а обрадуются ли этим емейлам твои адресаты.

Помни, что спам рассылать - как минимум неэтично.

Ну и еще забыл сказать - у всех общеупотребительных емейл серверов есть определенные антиспамовские правила рассылки емейлов, есть они и у gmail.com, если твои рассылки не вписываются в эти правила - твои емейлы никуда не уйдут, либо будут задержаны, а то и вовсе твой экаунт могут заблокировать... Так что советую сначала с ними ознакомится.

User_2013 · 01.07.2013

SergeS

спасибо.

 

Никто не сталкивался с настройкой relay postfix под smtp.mail.ru ? с gmail проблем нет - работает. А вот mail.ru... Буду признателен за мысли.

SergeS · 03.07.2013
SergeS

спасибо.

You are welcome.